package com.lncg.service;

import com.lncg.entity.BusinessPortConfig;

import java.util.List;

/**
 * 动态端口管理服务接口
 * 
 * 提供端口的动态检测、启动和停止功能。
 * 支持定时查询数据库配置，动态调整监听的端口。
 * 
 * @author LNCG
 * @version 1.2.0
 * @since 2024-10-17
 */
public interface IDynamicPortService {
    
    /**
     * 检测端口配置变化
     * 
     * 比较当前运行的端口与数据库配置，返回需要启动和停止的端口。
     * 
     * @return 端口变化结果，包含需要启动和停止的端口列表
     */
    PortChangeResult detectPortChanges();
    
    /**
     * 启动指定端口
     * 
     * @param port 端口号
     * @return 是否启动成功
     */
    boolean startPort(Integer port);
    
    /**
     * 停止指定端口
     * 
     * @param port 端口号
     * @return 是否停止成功
     */
    boolean stopPort(Integer port);
    
    /**
     * 获取当前运行的端口列表
     * 
     * @return 当前运行的端口号列表
     */
    List<Integer> getRunningPorts();
    
    /**
     * 端口变化结果类
     */
    class PortChangeResult {
        private List<BusinessPortConfig> portsToStart;
        private List<Integer> portsToStop;
        
        public PortChangeResult(List<BusinessPortConfig> portsToStart, List<Integer> portsToStop) {
            this.portsToStart = portsToStart;
            this.portsToStop = portsToStop;
        }
        
        public List<BusinessPortConfig> getPortsToStart() {
            return portsToStart;
        }
        
        public List<Integer> getPortsToStop() {
            return portsToStop;
        }
        
        public boolean hasChanges() {
            return !portsToStart.isEmpty() || !portsToStop.isEmpty();
        }
    }
}
